/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package model.dao;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.LinkedList;
import model.dto.PragaDoencaDTO;

/**
 *
 * @author Gabriel
 */
public class PragaDoencaDAO extends DAO {

    private static final String SQL_PRAGA_DOENCA =
            "SELECT pd.Id,\n"
            + "       pd.Flg_Praga_Doenca,\n"
            + "       pd.Flg_Alvo,\n"
            + "       pd.Nome_Vulgar,\n"
            + "       pd.Nome_Cientifico,\n"
            + "       pd.Agente_Causador,\n"
            + "       pd.Sintomas,\n"
            + "       pd.Tratamento\n"
            + "FROM Praga_Doenca pd, dominio d1, dominio d2\n"
            + "WHERE Flg_Alvo = d1.id\n"
            + "  AND Flg_Praga_Doenca = d2.id\n";

    public PragaDoencaDAO() throws SQLException, ClassNotFoundException {
        super();
    }

    private PragaDoencaDTO getPragaDoencaCorrenteResultSet(ResultSet rs) throws SQLException {
        PragaDoencaDTO pragaDoencaDTO = new PragaDoencaDTO();
        pragaDoencaDTO.setId(rs.getInt("Id"));
        pragaDoencaDTO.setAgenteCausador(rs.getString("Agente_Causador"));
        pragaDoencaDTO.setFlgAlvo(rs.getInt("Flg_Alvo"));
        pragaDoencaDTO.setFlgPragaDoenca(rs.getInt("Flg_Praga_Doenca"));
        pragaDoencaDTO.setNomeCientifico(rs.getString("Nome_Cientifico"));
        pragaDoencaDTO.setNomeVulgar(rs.getString("Nome_Vulgar"));
        pragaDoencaDTO.setSintomas(rs.getString("Sintomas"));
        pragaDoencaDTO.setTratamento(rs.getString("Tratamento"));
        return pragaDoencaDTO;
    }

    private LinkedList<PragaDoencaDTO> getPragasDoencasResultSet(ResultSet rs) throws SQLException {
        LinkedList<PragaDoencaDTO> pragasDoencas = new LinkedList<PragaDoencaDTO>();
        while (rs.next()) {
            pragasDoencas.add(getPragaDoencaCorrenteResultSet(rs));
        }
        return pragasDoencas;
    }

    public LinkedList<PragaDoencaDTO> getTodasPragasDoencas() throws SQLException {
        sql = SQL_PRAGA_DOENCA + ";";
        connector.executeSelectQuery(sql);
        return getPragasDoencasResultSet(resultSet);
    }

    public LinkedList<PragaDoencaDTO> pesquisaPragaDoenca(Integer id,
            String nomeVulgar,
            String nomeCientifico,
            String agenteCausador,
            String sintomas,
            String tratamento) throws SQLException {
        sql = SQL_PRAGA_DOENCA;

        if (id != null) {
            sql += "  AND Id  = " + id + "\n";
        }

        if (nomeVulgar != null) {
            sql += "  AND Nome_Vulgar LIKE '%" + nomeVulgar + "%'\n";
        }

        if (nomeCientifico != null) {
            sql += "  AND Nome_Cientifico LIKE '%" + nomeCientifico + "%'\n";
        }

        if (agenteCausador != null) {
            sql += "  AND Agente_Causador LIKE '%" + agenteCausador + "%'\n";
        }

        if (sintomas != null) {
            sql += "  AND Sintomas LIKE '%" + sintomas + "%'\n";
        }

        if (tratamento != null) {
            sql += "  AND Tratamento LIKE '%" + tratamento + "%'\n";
        }

        sql += ";";

        connector.executeSelectQuery(sql);
        return getPragasDoencasResultSet(resultSet);

    }

    public void inserePragaDoenca(PragaDoencaDTO pragaDoencaDTO) throws SQLException {
        sql = "insert into Praga_Doenca (Flg_Praga_Doenca,Flg_Alvo,Nome_Vulgar,Nome_Cientifico,Agente_Causador,Sintomas,Tratamento)"
                + "values (" + pragaDoencaDTO.getFlgPragaDoenca() + "," + pragaDoencaDTO.getFlgAlvo() + "," + pragaDoencaDTO.getNomeVulgar() + "," + pragaDoencaDTO.getNomeCientifico() + "," + pragaDoencaDTO.getAgenteCausador() + "," + pragaDoencaDTO.getSintomas() + "," + pragaDoencaDTO.getTratamento() + ");";

        connector.executeInsertQuery(sql);
    }

    public void atualizaPragaDoenca(PragaDoencaDTO pragaDoencaDTO,
            boolean atualizaFlgPragaDoenca,
            boolean atualizaFlgAlvo,
            boolean atualizaNomeVulgar,
            boolean atualizaNomeCientifico,
            boolean atualizaAgenteCausador,
            boolean atualizaSintomas,
            boolean atualizaTratamento) throws SQLException {

        /* O booleano abaixo informa se a instrução SQL ainda não recebeu nenhuma
        atualização. Desta maneira é possível saber se a condição virá precedida
        de uma vírgula ou não. */
        boolean naoPossuiAtualizacaoAinda = true;

        sql = "UPDATE PRAGA_DOENCA\n"
                + "SET ";

        if (atualizaFlgPragaDoenca) {
            sql += "Flg_Praga_Doenca = " + pragaDoencaDTO.getFlgPragaDoenca() + "\n";
            naoPossuiAtualizacaoAinda = false;
        }

        if (atualizaFlgAlvo) {
            if (naoPossuiAtualizacaoAinda) {
                sql += "Flg_Alvo = " + pragaDoencaDTO.getFlgAlvo() + "\n";
                naoPossuiAtualizacaoAinda = false;
            } else {
                sql += ",Flg_Alvo = " + pragaDoencaDTO.getFlgAlvo() + "\n";
            }
        }

        if (atualizaNomeVulgar) {
            if (naoPossuiAtualizacaoAinda) {
                sql += "Nome_Vulgar = " + pragaDoencaDTO.getNomeVulgar() + "\n";
                naoPossuiAtualizacaoAinda = false;
            } else {
                sql += ",Nome_Vulgar = " + pragaDoencaDTO.getNomeVulgar() + "\n";
            }
        }

        if (atualizaNomeCientifico) {
            if (naoPossuiAtualizacaoAinda) {
                sql += "Nome_Cientifico = " + pragaDoencaDTO.getNomeCientifico() + "\n";
                naoPossuiAtualizacaoAinda = false;
            } else {
                sql += ",Nome_Cientifico = " + pragaDoencaDTO.getNomeCientifico() + "\n";
            }
        }

        if (atualizaAgenteCausador) {
            if (naoPossuiAtualizacaoAinda) {
                sql += "Agente_Causador = " + pragaDoencaDTO.getAgenteCausador() + "\n";
                naoPossuiAtualizacaoAinda = false;
            } else {
                sql += ",Agente_Causador = " + pragaDoencaDTO.getAgenteCausador() + "\n";
            }
        }

        if (atualizaSintomas) {
            if (naoPossuiAtualizacaoAinda) {
                sql += "Sintomas = " + pragaDoencaDTO.getSintomas() + "\n";
                naoPossuiAtualizacaoAinda = false;
            } else {
                sql += ",Sintomas = " + pragaDoencaDTO.getSintomas() + "\n";
            }
        }

        if (atualizaTratamento) {
            if (naoPossuiAtualizacaoAinda) {
                sql += "Tratamento = " + pragaDoencaDTO.getTratamento() + "\n";
                naoPossuiAtualizacaoAinda = false;
            } else {
                sql += ",Tratamento = " + pragaDoencaDTO.getTratamento() + "\n";
            }
        }



        sql += "WHERE Id = " + pragaDoencaDTO.getId() + ";";

        connector.executeUpdateQuery(sql);
    }
}
